package pe.edu.pucp.notasmoviles.persistence.hibernate;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import pe.edu.pucp.notasmoviles.domain.Usuario;
import pe.edu.pucp.notasmoviles.persistence.UsuarioDao;

@Repository
public class UsuarioDaoHibernate extends HibernateDaoSupport implements
		UsuarioDao {
	private static final Logger logger = Logger
			.getLogger(UsuarioDaoHibernate.class);

	// Al igual que SimpleJdbcDaoSupport requiere de un DataSource
	@Autowired
	public UsuarioDaoHibernate(SessionFactory sessionFactory) {
		logger.debug("Inyectando el Session Factory al Dao");
		setSessionFactory(sessionFactory);
	}

	public Usuario getUsuarioPorUsername(String username) {
		logger.debug("Inicio");
		return getHibernateTemplate().get(Usuario.class, username);
	}

	public List<Usuario> getUsuarios() {
		logger.debug("Inicio");
		return getHibernateTemplate().loadAll(Usuario.class);
	}

	public int getCountUsuarios() {
		// HQL: Hibernate Query Language
		// Trabaja a nivel de objetos
		logger.debug("Inicio");
		return DataAccessUtils.intResult(getHibernateTemplate().find(
				"select count(*) from Usuario"));
	}

	public void insertar(Usuario usuario) {
		logger.debug("Inicio");
		getHibernateTemplate().save(usuario);

	}

	public void actualizar(Usuario usuario) {
		logger.debug("Inicio");
		getHibernateTemplate().update(usuario);
	}

	public void eliminar(Usuario usuario) {
		logger.debug("Inicio");
		getHibernateTemplate().delete(usuario);
	}

}
